﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SushiWeb.Models;
using System.ServiceModel;

namespace SushiWeb.Controllers
{
    public class PedidoController : Controller
    {
        //
        // GET: /Pedido/

        public ActionResult Pedidos()
        {
           
            //lectura de las sessiones cuando carga la pagina de pedidos
            Pedido pedido = new Pedido();

            if (Session["ClienteSesion"] != null)
            {
                Cliente user = (Cliente)Session["ClienteSesion"];
                pedido.NroDocumento = user.NumeroDocumento;
                pedido.Nombres = user.Nombres;
                pedido.Telefono = user.Telefono;
                pedido.Direccion = user.Direccion;
                pedido.Email = user.Email;
                

                if (Session["SessionDetallePedidos"] != null){
                    pedido.detallePedido = (List<Producto>)Session["SessionDetallePedidos"];
                }
                else
                {
                    pedido.detallePedido = new List<Producto>();
                }
            }
            
            return View(pedido);
        }


        [HttpPost]
        public ActionResult Pago(Pedido pedido)
        {
            string mensaje = "";
            string tipoMensaje = "";
            string action = "";
            string controller = "";

            if (Session["SessionDetallePedidos"] == null)
            //if (pedido.detallePedido == null)
            {
                mensaje = "Debe agregar minimo 1 producto al carrito.";
                tipoMensaje = "INFO";
                action = "Pedidos";
                controller = "Pedido";
                //return (Json(new { mensaje = mensaje, tipoMensaje = tipoMensaje, redirectTo = Url.Action("Pedidos") }, JsonRequestBehavior.DenyGet));
            }
            else
            {
                
                Cliente user = (Cliente)Session["ClienteSesion"];
                pedido.IdCliente = user.IdPersona;
                pedido.IdEmpleado = 1;
                pedido.Direccion = user.Direccion;

                try
                {
                    PedidoWS.PedidosClient proxyPedido = new PedidoWS.PedidosClient();

                    List<PedidoWS.DetallePedido> detallePedidos = new List<PedidoWS.DetallePedido>();
                    double TotalMonto = 0;
                    foreach (Producto produc in (List<Producto>)Session["SessionDetallePedidos"])
                    //foreach (Producto produc in pedido.detallePedido)
                    {
                        PedidoWS.DetallePedido detalleCrear = new PedidoWS.DetallePedido();
                        detalleCrear.IdProducto = produc.IdProducto;
                        detalleCrear.Cant = produc.cant;
                        detalleCrear.Monto = (produc.Precio * produc.cant);

                        TotalMonto += (TotalMonto + detalleCrear.Monto);

                        detallePedidos.Add(detalleCrear);
                    }
                    
                    PedidoWS.Pedido pedidoACrear = new PedidoWS.Pedido();

                    pedidoACrear.IdCliente = pedido.IdCliente;
                    pedidoACrear.IdEmpleado = pedido.IdEmpleado;
                    pedidoACrear.Estado = "PEND";
                    pedidoACrear.DireccionEntrega = pedido.Direccion;
                    pedidoACrear.Total = TotalMonto;

                    PedidoWS.Pedido pedidoCreado = proxyPedido.CrearPedido(pedidoACrear,detallePedidos);

                    mensaje = "Se ha generado el número de pedido " + pedidoCreado.NroPedido + " que fue enviado a su correo para su posterior confirmación.";
                    tipoMensaje = "INFO";
                    action = "Pago";
                    controller = "Pago";

                    Session["SessionDetallePedidos"] = null;

                    return (Json(new { mensaje = mensaje, tipoMensaje = tipoMensaje, redirectTo = Url.Action(action, controller, new { IdPedido = pedidoCreado.IdPedido, NroPedido = pedidoCreado.NroPedido, Total = pedidoCreado.Total }) }, JsonRequestBehavior.DenyGet));

                }
                catch (FaultException<PedidoWS.PedidoException> ex)
                {
                    mensaje = ex.Message;
                    tipoMensaje = "WARN";
                    //action = "Pedidos";
                    //controller = "Pedido";
                    return (Json(new { mensaje = mensaje, tipoMensaje = tipoMensaje, redirectTo = Url.Action("Pedidos") }, JsonRequestBehavior.DenyGet));
                }
                
                //return (Json(new { mensaje = mensaje, tipoMensaje = tipoMensaje, redirectTo = Url.Action("Pago", "Pago") }, JsonRequestBehavior.DenyGet));
            }


            return (Json(new { mensaje = mensaje, tipoMensaje = tipoMensaje, redirectTo = Url.Action(action, controller) }, JsonRequestBehavior.DenyGet));
        }

        public ActionResult AgregarCarro(int idProducto)
        {

            if (Session["ClienteSesion"] != null)
            {
                ProductoWS.ProductosClient proxy = new ProductoWS.ProductosClient();
                ProductoWS.Producto productoEncontrado = proxy.ObtenerProducto(idProducto);

                List<Producto> listaProductos = new List<Producto>();
                listaProductos = (List<Producto>)Session["SessionDetallePedidos"] ;
                Producto item = new Producto();

                item.IdProducto = productoEncontrado.IdProducto;
                item.Nombre = productoEncontrado.Nombre;
                item.Detalle = productoEncontrado.Detalle;
                item.Imagen = productoEncontrado.Imagen;
                item.Porcion = productoEncontrado.Porcion;
                item.Precio = productoEncontrado.Precio;
                item.TipoProducto = productoEncontrado.TipoProducto;

                listaProductos.Add(item);

                Session["SessionDetallePedidos"] = listaProductos;
                
            }

            return RedirectToAction("Carta", "Home");
            //return View();
        }



        


    }
}
